package top.gokzzz.jpa.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * JPA 查詢註解
 *
 * @author Gok
 * @version 1.1
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Query {

    /**
     * 字段路徑
     * 默認當前字段名，支持嵌套如 department.id
     */
    String path() default "";

    /**
     * 查詢類型
     *
     * @return {@link Type }
     */
    Type type() default Type.EQUAL;

    enum Type {

        /**
         * 等於
         */
        EQUAL,

        /**
         * 不等於
         */
        NOT_EQUAL,

        /**
         * 模糊
         */
        LIKE,

        /**
         * 大於
         */
        GREATER_THAN,

        /**
         * 小於
         */
        LESS_THAN,

        /**
         * 包含
         */
        IN,

        /**
         * 不包含
         */
        NOT_IN,

        /**
         * 為 NULL (對應字段類型支持 Boolean, 判斷是否開啟)
         */
        IS_NULL,

        /**
         * 不為 NULL (對應字段類型支持 Boolean, 判斷是否開啟)
         */
        IS_NOT_NULL;
    }
}
